﻿using Customer.Domain.Dto;
using Customer.Infrstructre.ProcurementManager;
using Customer.Infrstructre.VendorManager;
using Customer.Read.API.Applcation.Command.ProcurementCommand;
using MediatR;
using Newtonsoft.Json;
using static WMSpublic.ParseAPI;
using WMSpublic;
using System.Xml.Linq;
using System.Diagnostics.Contracts;
using System.Numerics;
using Customer.Domain;

namespace Customer.Read.API.Applcation.CommandHandlers.ProcurementCommandHandler
{

    /// <summary>
    /// 查看详情
    /// </summary>
    public class ProcurementCheckCommmandHandler : IRequestHandler<ProcurementCheckCommmand, List<ProcureProductDTO>>
    {
        IProcurementRepository rRep;
        IProcureProductRepository prRep;
        IVendorRepository vRep;


        public ProcurementCheckCommmandHandler(IProcureProductRepository prRep, IProcurementRepository rRep, IVendorRepository vRep)
        {
            this.prRep = prRep;
            this.rRep = rRep;
            this.vRep = vRep;
        }


        public async Task<List<ProcureProductDTO>> Handle(ProcurementCheckCommmand request, CancellationToken cancellationToken)
        {
            List<Products> product = await GetProductsList(1, 100);
            var list = from x in await rRep.GetAllAsync()
                       join c in await prRep.GetAllAsync() on x.ProcurementCode equals c.ProcurementCode
                       join p in product on c.ProductsId equals p.ProductsID
                       join v in await vRep.GetAllAsync() on x.VendorId equals v.VendorId
                       where c.ProcureProductId==request.ProcureProductId
                       select new ProcureProductDTO
                       {
                           ProcureProductId=c.ProcureProductId,
                           ProcurementId =x.ProcurementId,
                           ProcurementCode = x.ProcurementCode,
                           ProductsName = p.ProductsName,
                           ProductsCode = p.ProductsCode,
                           Specs = p.Specs,
                           Price = p.Price,
                           ProcureNum = c.ProcureNum,
                           VendorCode = v.VendorCode,
                           VendorName = v.VendorName,
                           DocumentType=x.DocumentType,
                           AssociateNumber=x.AssociateNumber,
                           Pcontact=x.Pcontact,
                           Phone=x.Phone,
                           MakePerson=x.MakePerson,
                           MarkTime=x.MarkTime,
                       };
            return list.ToList();
        }


        /// <summary>
        /// 产品
        /// </summary>
        /// <returns></returns>
        public async Task<dynamic> GetProductsList(int pindex, int psize)
        {
            string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyNiIsInNpZCI6IjE4NTk4MDM1MDY2MzA4NTY3MDQiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2dyb3Vwc2lkIjoiMiIsImp0aSI6IjQzMzA2NmRmLWYyNjAtNDI2Ny1iYWY5LWJkMzgxZGVhZGMwYiIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWUiOiLku5jmtJvlmIkiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy91cmkiOiIiLCJpc3MiOiJSZW5hb2JvMjAwNCIsImF1ZCI6IldlaWZ1d3UyMjAzQSJ9.JtV8g_mbUcJgyPC793AMsvjLkmkeuiRR9BAH6rQp8aU";
            HttpClientWrapper cilent = new HttpClientWrapper(token);

            string chanpin = "http://116.205.121.197:8000/cpd/api/ProductRead/GetAllProductInfo?pageindex=" + pindex + "&pagesize=" + psize;

            string postReponse = await cilent.GetAsync(chanpin);
            var json = JsonConvert.DeserializeObject<ApiResultList<Products>>(postReponse);
            return json.data.list;
        }


        //产品
        public class Products
        {
            /// <summary>
            /// 产品id
            /// </summary>
            public int ProductsID { get; set; }
            /// <summary>
            /// 产品编号
            /// </summary>
            public string? ProductsCode { get; set; }
            /// <summary>
            /// 产品名称
            /// </summary>
            public string? ProductsName { get; set; }
            /// <summary>
            /// 厂商编码
            /// </summary>
            public string? VendorsCode { get; set; }
            /// <summary>
            /// 内部编码
            /// </summary>
            public string? InteriorCode { get; set; }
            /// <summary>
            /// 规格
            /// </summary>
            public string? Specs { get; set; }
            /// <summary>
            /// 产品类别
            /// </summary>
            public int? ProductTypeID { get; set; }
            /// <summary>
            /// 存储单位
            /// </summary>
            public string? StorageUnits { get; set; }
            /// <summary>
            /// 预警（上）
            /// </summary>
            public int? Upperlimit { get; set; }
            /// <summary>
            /// 预警（下）
            /// </summary>
            public int? Lowerlimit { get; set; }
            /// <summary>
            /// 包装类型
            /// </summary>
            public int? WrapType { get; set; }
            /// <summary>
            /// 价格
            /// </summary>
            public decimal? Price { get; set; }
            /// <summary>
            /// 重量
            /// </summary>
            public decimal? Weight { get; set; }
            /// <summary>
            /// 默认仓库
            /// </summary>
            public int? WarehouseId { get; set; }
            /// <summary>
            /// 库位
            /// </summary>
            public int? StorehouseId { get; set; }
            /// <summary>
            /// 默认供应商
            /// </summary>
            public int? VendorId { get; set; }
            /// <summary>
            /// 默认客户
            /// </summary>
            public int? ClientId { get; set; }
            /// <summary>
            /// 描述
            /// </summary>
            public string? Describe { get; set; }
            /// <summary>
            /// 产品数量
            /// </summary>
            public int? ProcurementNum { get; set; }
            /// <summary>
            /// 公司id
            /// </summary>
            public string? Office_Id { get; set; }

            /// <summary>
            /// 用户id
            /// </summary>
            public int? User_Id { get; set; }
        }
    }
}
